package thread;

//多线程安全问题
//4.1观察线程安全
public class Demo12 {
    private static int count = 0;

    public static void main(String[] args) throws InterruptedException {
        Object lock = new Object();

        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                synchronized (lock) { count++;}
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                synchronized (lock) { count++;}
            }
        });

        //此时是并发执行
        t1.start();
        t2.start();

        //如果没有这两个join, 很可能线程还没自增完, 就开始打印了, 很可能打印出来的count就是0
        t1.join();
        t2.join();

        //预期结果是10w
        System.out.println("count: " + count);

        //打印出来的数字是随机的 - 线程不安全bug
    }
    //综上，可以发现由于线程调度顺序不同导致的线程不安全问题，故要保证在所有可能情况下都执行正确才是真正的线程安全
}
